
//1089.复写零
class Solution {
public:
    void duplicateZeros(vector<int>& nums) {
        //先通过模拟找到返回数组中的最后一位
        int n=nums.size();
        int prev=0,cur=0;
        while(cur<n)
        {
            if(nums[prev]==0) cur++;
            cur++,prev++;
        }
        //此时prev-1就是输出数组的最后一位
        //从prev开始向前移动
        prev-=1;
        //注意：有一种特殊情况，当最后一位是0的时候进行向后移只剩一个数没有覆盖，所以只有一个0，没有复写
        if(cur==n+1) nums[n-1]=0,cur=n-2,prev-=1;  //进行特殊处理，将末尾没有复写的0直接加到结尾即可
        else cur=n-1;
        for(;prev>=0;prev--)
        {
            nums[cur--]=nums[prev];
            if(nums[prev]==0) nums[cur--]=0; //进行复写
        }
    }
};